// 引入 axios 库，用于发起 HTTP 请求
const axios = require('axios');

// 创建一个自定义的 axios 实例，命名为 apiClient
// 这里可以对实例进行一些全局配置
const apiClient = axios.create({
    // 基础 URL，后续请求的相对路径会拼接在这个基础 URL 后面
    baseURL: 'https://jsonplaceholder.typicode.com',
    // 请求超时时间，单位为毫秒
    // 如果请求在 5000 毫秒（即 5 秒）内未完成，将触发超时错误
    timeout: 5000,
    // 设置请求头，这里指定请求的内容类型为 JSON
    headers: {
        'Content-Type': 'application/json'
    }
});

// 定义一个异步函数来发起 GET 请求
async function getPosts() {
    try {
        // 使用 apiClient 实例发起 GET 请求，请求路径为 /posts
        const response = await apiClient.get('/posts');
        // 打印响应状态码
        console.log('GET 请求状态码:', response.status);
        // 打印响应数据，即获取到的帖子列表
        console.log('GET 请求响应数据:', response.data);
    } catch (error) {
        // 若请求出错，打印错误信息
        console.error('GET 请求出错:', error.message);
    }
}

// 定义一个异步函数来发起 POST 请求
async function createPost() {
    try {
        // 定义要发送的数据，这里模拟创建一个新的帖子
        const newPost = {
            title: 'New Post',
            body: 'This is a new post created by the API client.',
            userId: 1
        };
        // 使用 apiClient 实例发起 POST 请求，请求路径为 /posts，并传递新帖子的数据
        const response = await apiClient.post('/posts', newPost);
        // 打印响应状态码
        console.log('POST 请求状态码:', response.status);
        // 打印响应数据，即新创建的帖子信息
        console.log('POST 请求响应数据:', response.data);
    } catch (error) {
        // 若请求出错，打印错误信息
        console.error('POST 请求出错:', error.message);
    }
}

// 定义一个异步函数来发起 PUT 请求
async function updatePost() {
    try {
        // 定义要更新的数据，这里模拟更新一个已存在的帖子
        const updatedPost = {
            title: 'Updated Post',
            body: 'This post has been updated by the API client.',
            userId: 1
        };
        // 使用 apiClient 实例发起 PUT 请求，请求路径为 /posts/1，表示更新 ID 为 1 的帖子
        const response = await apiClient.put('/posts/1', updatedPost);
        // 打印响应状态码
        console.log('PUT 请求状态码:', response.status);
        // 打印响应数据，即更新后的帖子信息
        console.log('PUT 请求响应数据:', response.data);
    } catch (error) {
        // 若请求出错，打印错误信息
        console.error('PUT 请求出错:', error.message);
    }
}

// 定义一个异步函数来发起 DELETE 请求
async function deletePost() {
    try {
        // 使用 apiClient 实例发起 DELETE 请求，请求路径为 /posts/1，表示删除 ID 为 1 的帖子
        const response = await apiClient.delete('/posts/1');
        // 打印响应状态码
        console.log('DELETE 请求状态码:', response.status);
        // 打印响应数据，通常删除操作成功后返回空对象
        console.log('DELETE 请求响应数据:', response.data);
    } catch (error) {
        // 若请求出错，打印错误信息
        console.error('DELETE 请求出错:', error.message);
    }
}

// 调用各个异步函数来执行不同类型的请求
getPosts();
createPost();
updatePost();
deletePost();
